pwnable 笔记 Toddler's Bottle - random

pwnable.kr一道1point的题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
int main(){
unsigned int random;
random = rand(); random value!
printf(%u,random);
unsigned int key=0;
scanf(%d, &key);
if( (key ^ random) == 0xdeadbeef ){
printf(Good!n);
system(bincat flag);
return 0;
}
printf(Wrong, maybe you should try 2^32 cases.n);
return 0;
}

分析下代码

发现输入的key只要和random异或等于 0xdeadbeef

那么就可以得到flag

1
2
3
4
5
6
7
8
9
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned random
random = rand();
printf(%u,random);
return0;
}

测试每次输出的都一样,rand函数返回的都是:1804289383

and()函数用来产生随机数,但是,rand()的内部实现是用线性同余法实现的,是伪随机数,由于周期较长,因此在一定范围内可以看成是随机的。

rand()会返回一个范围在0到RAND_MAX(32767)之间的伪随机数(整数)。

在调用rand()函数之前,可以使用srand()函数设置随机数种子,如果没有设置随机数种子,rand()函数在调用时,自动设计随机数种子为1。随机种子相同,每次产生的随机数也会相同。

rand()函数需要的头文件是:stdlib.h

rand()函数原型:int rand(void);

使用rand()函数产生1-100以内的随机整数:int number1 = rand() % 100;

异或是可逆的
这里写图片描述

这里写图片描述
输入3039230856
这里写图片描述
就可以得到flag了

flag:Mommy, I thought libc random is unpredictable…

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
,